<html>
<head>
<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script src="http://www.google.com/jsapi?autoload={'modules':[{'name':'visualization','version':'1','packages':['controls', 'charteditor']}]}"></script>
<script src="http://jquery-csv.googlecode.com/git/src/jquery.csv.js"></script>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script>
$(function() {
  google.load("visualization", "1", {packages:["corechart"]});

    var csv = $('#textInput').val();
    var data = $.csv.toArrays(csv, {
        onParseValue: $.csv.hooks.castToScalar
    });

    // Convert data for bar chart (averaging all digits)
    var timeData = {};  // type -> table
    var funcRowMap;

    for (var i = 1; i < data.length; i++) {
      var type = data[i][0];
      var func = data[i][1];
      var digit = data[i][2];
      var time = data[i][3];
      if (timeData[type] == null) {
        timeData[type] = [["Function", "Time (ns)"/*, { role: "style" }*/]];
        if (digit != 0)
          funcRowMap = {};
      }

      var table = timeData[type];
      
      if (digit != 0) {
        if (funcRowMap[func] == null)
          funcRowMap[func] = table.push([func, []/*, defaultColors[table.length - 1]*/]) - 1;
        
        table[funcRowMap[func]][1].push(time);
      }
      else
        table.push([func, time]);
    }

    // averaging
    for (var type in timeData) {
      var table = timeData[type];
      for (var i = 0; i < table.length; i++) {
        if (typeof(table[i][1]) == "object") {
          var sum = 0;
          for (var j = 0; j < table[i][1].length; j++)
            sum += table[i][1][j];
          table[i][1] = sum / table[i][1].length;
        }
      }
    }

    // Convert data for drawing line chart per sequential digit
    var timeDigitData = {}; // type -> table
    var funcColumnMap;

    for (var i = 1; i < data.length; i++) {
      var type = data[i][0];
      var func = data[i][1];
      var digit = data[i][2];
      var time = data[i][3];

      if (digit == 0)
        continue;

      if (timeDigitData[type] == null) {
        timeDigitData[type] = [["Digit"]];
        funcColumnMap = {};
      }

      var table = timeDigitData[type];

      if (funcColumnMap[func] == null)
        funcColumnMap[func] = table[0].push(func) - 1;

      var row;
      for (row = 1; row < table.length; row++)
        if (table[row][0] == digit)
          break;

      if (row == table.length)
        table.push([digit]);

    table[row][funcColumnMap[func]] = time;
  }

  for (var type in timeData) {
    $("#main").append(
      $("<a>", {name: type}),
      $("<h2>", {style: "padding-top: 70px; margin-top: -70px;"}).append(type)
    );

    $("#section").append($("<li>").append($("<a>", {href: "#" + type}).append(type)));

    drawTable(type, timeData[type]);
    drawBarChart(type, timeData[type]);
    if (timeDigitData[type] != null)
      drawDigitChart(type, timeDigitData[type]);
  }

  // Image download button
  $(".chart").each(function() {
    var chart = $(this);
    var d = $("#downloadDD").clone().css("display", "");
    $('li a', d).each(function() {
          $(this).click(function() {
              var svg = chart[0].getElementsByTagName('svg')[0].parentNode.innerHTML;
              svg=sanitize(svg);
              $('#imageFilename').val($("#title").html() + "_" + chart.data("filename"));
              $('#imageGetFormTYPE').val($(this).attr('dltype'));
              $('#imageGetFormSVG').val(svg);
              $('#imageGetForm').submit();
          });
      });   
    $(this).after(d);
  });

  // Show markdown button
  $(".tablechart").each(function() {
    var chart = $(this);
    var type = chart.data("type");
    var d = $("#showMD").clone().css("display", "");
    $('.collapse', d).first().attr("id", "tableMD" + type);
    $('button', d).first().attr("data-target","#tableMD" + type).click(function() {
      var markdown = DataTableToMarkdown(chart.data("data"));
      $('textarea', d).val(markdown).attr("rows", markdown.split("\n").length);
    });
    $(this).after(d);
  });

  // Add configurations
  var thisConfig = "corei7920@2.67_cygwin64_gcc4.8";
  var configurations = ["corei7920@2.67_cygwin32_gcc4.8","corei7920@2.67_cygwin64_gcc4.8","corei7920@2.67_win32_vc2013","corei7920@2.67_win64_vc2013"];

  for (var i in configurations) {
    var c = configurations[i];
    $("#configuration").append($("<li>", {class : (c == thisConfig ? "active" : "")}).append($("<a>", {href: c + ".html"}).append(c)));
  }
});

function drawTable(type, timeData) {
  var data = google.visualization.arrayToDataTable(timeData);
    data.addColumn('number', 'Speedup');
    data.sort([{ column: 1, desc: true }]);
    var formatter1 = new google.visualization.NumberFormat({ fractionDigits: 3 });
    formatter1.format(data, 1);

    var div = document.createElement("div");
    div.className = "tablechart";
    $(div).data("type", type).data("data", data);
    $("#main").append(div);
    var table = new google.visualization.Table(div);
    redrawTable(0);
    table.setSelection([{ row: 0, column: null}]);

    function redrawTable(selectedRow) {
      // Compute relative time using the first row as basis
      var basis = data.getValue(selectedRow, 1);
      for (var rowIndex = 0; rowIndex < data.getNumberOfRows(); rowIndex++)
        data.setValue(rowIndex, 2, basis / data.getValue(rowIndex, 1));

      var formatter = new google.visualization.NumberFormat({suffix: 'x'});
      formatter.format(data, 2); // Apply formatter to second column

      table.draw(data);
    }

    google.visualization.events.addListener(table, 'select',
    function() {
      var selection = table.getSelection();
      if (selection.length > 0) {
        var item = selection[0];
        if (item.row != null) {
          redrawTable(item.row);

          // Also update markdown
          var markdown = DataTableToMarkdown(data);
          $('textarea', $("#tableMD" + type)).val(markdown);
        }
      }
    });
}

function drawBarChart(type, timeData) {
  var defaultColors = ["#3366cc","#dc3912","#ff9900","#109618","#990099","#0099c6","#dd4477","#66aa00","#b82e2e","#316395","#994499","#22aa99","#aaaa11","#6633cc","#e67300","#8b0707","#651067","#329262","#5574a6","#3b3eac","#b77322","#16d620","#b91383","#f4359e","#9c5935","#a9c413","#2a778d","#668d1c","#bea413","#0c5922","#743411"];

  var data = google.visualization.arrayToDataTable(timeData);
  data.addColumn({ type: "string", role: "style" })
  for (var rowIndex = 0; rowIndex < data.getNumberOfRows(); rowIndex++)
    data.setValue(rowIndex, 2, defaultColors[rowIndex]);

  data.sort([{ column: 1, desc: true }]);
  var options = { 
    title: type,
    chartArea: {'width': '70%', 'height': '70%'},
    width: 800,
    height: 300,
    legend: { position: "none" },
    hAxis: { title: "Time (ns)" }
  };
  var div = document.createElement("div");
  div.className = "chart";
  $(div).data("filename", type + "_time");
  $("#main").append(div);
  var chart = new google.visualization.BarChart(div);

  chart.draw(data, options);
}

function drawDigitChart(type, timeDigitData) {
  var data = google.visualization.arrayToDataTable(timeDigitData);

  var options = { 
    title: type,
    chartArea: {'width': '70%', 'height': '80%'},
    hAxis: {
      title: "Digit",
      gridlines: { count: timeDigitData.length - 1 },
      maxAlternation: 1,
      minTextSpacing: 0
    },
    vAxis: {
      title: "Time (ns) in log scale",
      logScale: true,
      minorGridlines: { count: 10 },
      baseline: 0
    },
    width: 800,
    height: 600
  };
  var div = document.createElement("div");
  div.className = "chart";
  $(div).data("filename", type + "_timedigit");
  $("#main").append(div);
  var chart = new google.visualization.LineChart(div);

  chart.draw(data, options);
}

// http://jsfiddle.net/P6XXM/
function sanitize(svg) {
    svg = svg
        .replace(/\<svg/,'<svg xmlns="http://www.w3.org/2000/svg" version="1.1"')
        .replace(/zIndex="[^"]+"/g, '')
        .replace(/isShadow="[^"]+"/g, '')
        .replace(/symbolName="[^"]+"/g, '')
        .replace(/jQuery[0-9]+="[^"]+"/g, '')
        .replace(/isTracker="[^"]+"/g, '')
        .replace(/url\([^#]+#/g, 'url(#')
        .replace('<svg xmlns:xlink="http://www.w3.org/1999/xlink" ', '<svg ')
        .replace(/ href=/g, ' xlink:href=')
    /*.replace(/preserveAspectRatio="none">/g, 'preserveAspectRatio="none"/>')*/
    /* This fails in IE < 8
    .replace(/([0-9]+)\.([0-9]+)/g, function(s1, s2, s3) { // round off to save weight
    return s2 +'.'+ s3[0];
    })*/

    // IE specific
        .replace(/id=([^" >]+)/g, 'id="$1"')
        .replace(/class=([^" ]+)/g, 'class="$1"')
        .replace(/ transform /g, ' ')
        .replace(/:(path|rect)/g, '$1')
        .replace(/<img ([^>]*)>/gi, '<image $1 />')
        .replace(/<\/image>/g, '') // remove closing tags for images as they'll never have any content
        .replace(/<image ([^>]*)([^\/])>/gi, '<image $1$2 />') // closes image tags for firefox
        .replace(/width=(\d+)/g, 'width="$1"')
        .replace(/height=(\d+)/g, 'height="$1"')
        .replace(/hc-svg-href="/g, 'xlink:href="')
        .replace(/style="([^"]+)"/g, function (s) {
            return s.toLowerCase();
        });

    // IE9 beta bugs with innerHTML. Test again with final IE9.
    svg = svg.replace(/(url\(#highcharts-[0-9]+)&quot;/g, '$1')
        .replace(/&quot;/g, "'");
    if (svg.match(/ xmlns="/g).length == 2) {
        svg = svg.replace(/xmlns="[^"]+"/, '');
    }

    return svg;
}

function DataTableToMarkdown(dataTable) {
  var s = "|";
  var columnCount = dataTable.getNumberOfColumns();
  var rowCount = dataTable.getNumberOfRows();

  // compute columnWidths & padding
  var columnWidths = new Array();
  var columnPadRight = new Array();
  for (var columnIndex = 0; columnIndex < columnCount; columnIndex++) {
    columnWidths.push(dataTable.getColumnLabel(columnIndex).length);
    columnPadRight.push(dataTable.getColumnType(columnIndex) == 'number');
  }
  for (var rowIndex = 0; rowIndex < rowCount; rowIndex++)
    for (var columnIndex = 0; columnIndex < columnCount; columnIndex++)
      columnWidths[columnIndex] = Math.max(columnWidths[columnIndex], dataTable.getFormattedValue(rowIndex, columnIndex).length);

  function pad(columnIndex, s) {
    var spaces = Array(columnWidths[columnIndex] - s.length + 1).join(' ');
    return columnPadRight[columnIndex] ? spaces + s : s + spaces;
  }

  // header
  for (var columnIndex = 0; columnIndex < columnCount; columnIndex++)
    s += pad(columnIndex, dataTable.getColumnLabel(columnIndex)) + "|";
  s += "\n|";

  // header line
  for (var columnIndex = 0; columnIndex < columnCount; columnIndex++) {
    if (columnPadRight[columnIndex])
      s += Array(columnWidths[columnIndex]).join("-") + ":|";
    else
      s += Array(columnWidths[columnIndex] + 1).join("-") + "|";
  }
  s += "\n";

  // contents
  for (var rowIndex = 0; rowIndex < rowCount; rowIndex++) {
    s += "|";
    for (var columnIndex = 0; columnIndex < columnCount; columnIndex++)
      s += pad(columnIndex, dataTable.getFormattedValue(rowIndex, columnIndex)) + "|";
    s += "\n";
  }

  return s;
}
</script>
<style type="text/css">
@media (min-width: 800px) {
  .container {
    max-width: 800px;
  }
}
textarea {
  font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
}
.tablechart {
  width: 700px;
  margin: auto;
  padding-top: 20px;
  padding-bottom: 20px;
}
.chart {
  padding-top: 20px;
  padding-bottom: 20px;
}
body { padding-top: 70px; }
</style>
</head>
<body>
<div class="container">
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
  <div class="container">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="https://github.com/miloyip/itoa-benchmark"><span class="glyphicon glyphicon-home"></span> itoa-benchmark</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown">Configuration <span class="caret"></span></a>
          <ul class="dropdown-menu" role="menu" id="configuration">
          </ul>
        </li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown">Section <span class="caret"></span></a>
          <ul class="dropdown-menu" role="menu" id="section">
          </ul>
        </li>
      </ul>
      <p class="navbar-text navbar-right">Developed by <a href="https://github.com/miloyip" class="navbar-link">Milo Yip</a></p>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>
<div class="page-header">
<h1 id="title">corei7920@2.67_cygwin64_gcc4.8</h1>
</div>
<div id="main"></div>
<h2>Source CSV</h2>
<textarea id="textInput" class="form-control" rows="5" readonly>
Type,Function,Digit,Time(ns)
u32toa_sequential,branchlut,1,5.610000
u32toa_sequential,branchlut,2,6.060000
u32toa_sequential,branchlut,3,6.410000
u32toa_sequential,branchlut,4,5.700000
u32toa_sequential,branchlut,5,9.980000
u32toa_sequential,branchlut,6,10.390000
u32toa_sequential,branchlut,7,10.740000
u32toa_sequential,branchlut,8,11.550000
u32toa_sequential,branchlut,9,14.980000
u32toa_sequential,branchlut,10,15.030000
u32toa_random,branchlut,0,18.958000
u32toa_sequential,count,1,6.220000
u32toa_sequential,count,2,8.790000
u32toa_sequential,count,3,11.980000
u32toa_sequential,count,4,14.610000
u32toa_sequential,count,5,17.650000
u32toa_sequential,count,6,20.870000
u32toa_sequential,count,7,24.390000
u32toa_sequential,count,8,27.770000
u32toa_sequential,count,9,30.890000
u32toa_sequential,count,10,34.060000
u32toa_random,count,0,31.024000
u32toa_sequential,countlut,1,4.630000
u32toa_sequential,countlut,2,4.700000
u32toa_sequential,countlut,3,7.520000
u32toa_sequential,countlut,4,7.600000
u32toa_sequential,countlut,5,10.680000
u32toa_sequential,countlut,6,10.300000
u32toa_sequential,countlut,7,13.180000
u32toa_sequential,countlut,8,14.070000
u32toa_sequential,countlut,9,16.530000
u32toa_sequential,countlut,10,16.940000
u32toa_random,countlut,0,20.586000
u32toa_sequential,lut,1,4.990000
u32toa_sequential,lut,2,7.480000
u32toa_sequential,lut,3,7.480000
u32toa_sequential,lut,4,9.290000
u32toa_sequential,lut,5,11.170000
u32toa_sequential,lut,6,12.530000
u32toa_sequential,lut,7,14.610000
u32toa_sequential,lut,8,16.550000
u32toa_sequential,lut,9,19.440000
u32toa_sequential,lut,10,21.240000
u32toa_random,lut,0,25.437000
u32toa_sequential,mwilson,1,5.340000
u32toa_sequential,mwilson,2,7.570000
u32toa_sequential,mwilson,3,11.020000
u32toa_sequential,mwilson,4,14.480000
u32toa_sequential,mwilson,5,19.010000
u32toa_sequential,mwilson,6,22.060000
u32toa_sequential,mwilson,7,25.020000
u32toa_sequential,mwilson,8,29.430000
u32toa_sequential,mwilson,9,34.750000
u32toa_sequential,mwilson,10,37.450000
u32toa_random,mwilson,0,33.197000
u32toa_sequential,naive,1,4.990000
u32toa_sequential,naive,2,7.940000
u32toa_sequential,naive,3,11.280000
u32toa_sequential,naive,4,15.240000
u32toa_sequential,naive,5,18.660000
u32toa_sequential,naive,6,22.430000
u32toa_sequential,naive,7,26.260000
u32toa_sequential,naive,8,30.430000
u32toa_sequential,naive,9,34.500000
u32toa_sequential,naive,10,38.510000
u32toa_random,naive,0,37.271000
u32toa_sequential,null,1,2.490000
u32toa_sequential,null,2,2.490000
u32toa_sequential,null,3,2.490000
u32toa_sequential,null,4,2.490000
u32toa_sequential,null,5,2.490000
u32toa_sequential,null,6,2.490000
u32toa_sequential,null,7,2.490000
u32toa_sequential,null,8,2.500000
u32toa_sequential,null,9,2.490000
u32toa_sequential,null,10,2.490000
u32toa_random,null,0,2.500000
u32toa_sequential,sprintf,1,110.420000
u32toa_sequential,sprintf,2,119.290000
u32toa_sequential,sprintf,3,122.920000
u32toa_sequential,sprintf,4,129.750000
u32toa_sequential,sprintf,5,136.830000
u32toa_sequential,sprintf,6,143.670000
u32toa_sequential,sprintf,7,151.800000
u32toa_sequential,sprintf,8,158.800000
u32toa_sequential,sprintf,9,165.360000
u32toa_sequential,sprintf,10,174.580000
u32toa_random,sprintf,0,163.686000
u32toa_sequential,sse2,1,4.990000
u32toa_sequential,sse2,2,5.840000
u32toa_sequential,sse2,3,6.060000
u32toa_sequential,sse2,4,5.800000
u32toa_sequential,sse2,5,10.010000
u32toa_sequential,sse2,6,10.940000
u32toa_sequential,sse2,7,11.090000
u32toa_sequential,sse2,8,11.690000
u32toa_sequential,sse2,9,9.990000
u32toa_sequential,sse2,10,10.200000
u32toa_random,sse2,0,18.077000
i32toa_sequential,branchlut,1,6.770000
i32toa_sequential,branchlut,2,7.130000
i32toa_sequential,branchlut,3,7.850000
i32toa_sequential,branchlut,4,6.770000
i32toa_sequential,branchlut,5,10.620000
i32toa_sequential,branchlut,6,11.690000
i32toa_sequential,branchlut,7,11.810000
i32toa_sequential,branchlut,8,12.230000
i32toa_sequential,branchlut,9,16.180000
i32toa_sequential,branchlut,10,16.250000
i32toa_random,branchlut,0,23.132000
i32toa_sequential,count,1,7.170000
i32toa_sequential,count,2,9.690000
i32toa_sequential,count,3,12.600000
i32toa_sequential,count,4,15.070000
i32toa_sequential,count,5,18.430000
i32toa_sequential,count,6,21.880000
i32toa_sequential,count,7,24.750000
i32toa_sequential,count,8,28.710000
i32toa_sequential,count,9,31.780000
i32toa_sequential,count,10,34.940000
i32toa_random,count,0,33.444000
i32toa_sequential,countlut,1,5.700000
i32toa_sequential,countlut,2,5.640000
i32toa_sequential,countlut,3,8.290000
i32toa_sequential,countlut,4,8.780000
i32toa_sequential,countlut,5,11.370000
i32toa_sequential,countlut,6,11.420000
i32toa_sequential,countlut,7,14.180000
i32toa_sequential,countlut,8,14.640000
i32toa_sequential,countlut,9,17.630000
i32toa_sequential,countlut,10,17.860000
i32toa_random,countlut,0,24.716000
i32toa_sequential,lut,1,6.410000
i32toa_sequential,lut,2,8.900000
i32toa_sequential,lut,3,8.560000
i32toa_sequential,lut,4,10.350000
i32toa_sequential,lut,5,12.330000
i32toa_sequential,lut,6,13.970000
i32toa_sequential,lut,7,16.370000
i32toa_sequential,lut,8,17.860000
i32toa_sequential,lut,9,20.900000
i32toa_sequential,lut,10,22.460000
i32toa_random,lut,0,30.300000
i32toa_sequential,mwilson,1,6.590000
i32toa_sequential,mwilson,2,9.460000
i32toa_sequential,mwilson,3,13.570000
i32toa_sequential,mwilson,4,17.610000
i32toa_sequential,mwilson,5,21.670000
i32toa_sequential,mwilson,6,25.510000
i32toa_sequential,mwilson,7,30.260000
i32toa_sequential,mwilson,8,33.730000
i32toa_sequential,mwilson,9,38.950000
i32toa_sequential,mwilson,10,45.330000
i32toa_random,mwilson,0,39.894000
i32toa_sequential,naive,1,6.230000
i32toa_sequential,naive,2,8.800000
i32toa_sequential,naive,3,12.070000
i32toa_sequential,naive,4,15.630000
i32toa_sequential,naive,5,19.510000
i32toa_sequential,naive,6,23.480000
i32toa_sequential,naive,7,27.660000
i32toa_sequential,naive,8,30.700000
i32toa_sequential,naive,9,37.130000
i32toa_sequential,naive,10,40.360000
i32toa_random,naive,0,41.686000
i32toa_sequential,null,1,2.490000
i32toa_sequential,null,2,2.490000
i32toa_sequential,null,3,2.490000
i32toa_sequential,null,4,2.490000
i32toa_sequential,null,5,2.490000
i32toa_sequential,null,6,2.490000
i32toa_sequential,null,7,2.490000
i32toa_sequential,null,8,2.490000
i32toa_sequential,null,9,2.490000
i32toa_sequential,null,10,2.490000
i32toa_random,null,0,2.142000
i32toa_sequential,sprintf,1,115.700000
i32toa_sequential,sprintf,2,123.720000
i32toa_sequential,sprintf,3,128.340000
i32toa_sequential,sprintf,4,138.500000
i32toa_sequential,sprintf,5,141.360000
i32toa_sequential,sprintf,6,151.400000
i32toa_sequential,sprintf,7,156.160000
i32toa_sequential,sprintf,8,162.840000
i32toa_sequential,sprintf,9,173.500000
i32toa_sequential,sprintf,10,178.340000
i32toa_random,sprintf,0,174.136000
i32toa_sequential,sse2,1,5.900000
i32toa_sequential,sse2,2,6.310000
i32toa_sequential,sse2,3,6.710000
i32toa_sequential,sse2,4,6.410000
i32toa_sequential,sse2,5,10.790000
i32toa_sequential,sse2,6,11.810000
i32toa_sequential,sse2,7,12.150000
i32toa_sequential,sse2,8,12.810000
i32toa_sequential,sse2,9,10.430000
i32toa_sequential,sse2,10,10.950000
i32toa_random,sse2,0,21.592000
u64toa_sequential,branchlut,1,6.410000
u64toa_sequential,branchlut,2,7.840000
u64toa_sequential,branchlut,3,8.200000
u64toa_sequential,branchlut,4,7.480000
u64toa_sequential,branchlut,5,10.350000
u64toa_sequential,branchlut,6,11.120000
u64toa_sequential,branchlut,7,12.140000
u64toa_sequential,branchlut,8,12.750000
u64toa_sequential,branchlut,9,23.400000
u64toa_sequential,branchlut,10,24.050000
u64toa_sequential,branchlut,11,24.400000
u64toa_sequential,branchlut,12,23.940000
u64toa_sequential,branchlut,13,24.210000
u64toa_sequential,branchlut,14,22.920000
u64toa_sequential,branchlut,15,24.400000
u64toa_sequential,branchlut,16,23.050000
u64toa_sequential,branchlut,17,28.580000
u64toa_sequential,branchlut,18,28.700000
u64toa_sequential,branchlut,19,29.190000
u64toa_sequential,branchlut,20,29.750000
u64toa_random,branchlut,0,30.878000
u64toa_sequential,count,1,6.470000
u64toa_sequential,count,2,10.110000
u64toa_sequential,count,3,13.230000
u64toa_sequential,count,4,17.890000
u64toa_sequential,count,5,23.030000
u64toa_sequential,count,6,28.280000
u64toa_sequential,count,7,33.330000
u64toa_sequential,count,8,38.760000
u64toa_sequential,count,9,43.950000
u64toa_sequential,count,10,49.730000
u64toa_sequential,count,11,54.340000
u64toa_sequential,count,12,60.890000
u64toa_sequential,count,13,64.200000
u64toa_sequential,count,14,70.690000
u64toa_sequential,count,15,74.320000
u64toa_sequential,count,16,80.970000
u64toa_sequential,count,17,85.370000
u64toa_sequential,count,18,88.570000
u64toa_sequential,count,19,103.040000
u64toa_sequential,count,20,103.040000
u64toa_random,count,0,66.605000
u64toa_sequential,countlut,1,6.060000
u64toa_sequential,countlut,2,6.500000
u64toa_sequential,countlut,3,8.680000
u64toa_sequential,countlut,4,9.690000
u64toa_sequential,countlut,5,11.910000
u64toa_sequential,countlut,6,13.230000
u64toa_sequential,countlut,7,15.230000
u64toa_sequential,countlut,8,16.130000
u64toa_sequential,countlut,9,20.570000
u64toa_sequential,countlut,10,21.400000
u64toa_sequential,countlut,11,23.010000
u64toa_sequential,countlut,12,23.540000
u64toa_sequential,countlut,13,26.430000
u64toa_sequential,countlut,14,26.440000
u64toa_sequential,countlut,15,29.240000
u64toa_sequential,countlut,16,29.580000
u64toa_sequential,countlut,17,34.630000
u64toa_sequential,countlut,18,34.500000
u64toa_sequential,countlut,19,36.670000
u64toa_sequential,countlut,20,37.130000
u64toa_random,countlut,0,34.492000
u64toa_sequential,lut,1,4.990000
u64toa_sequential,lut,2,7.480000
u64toa_sequential,lut,3,8.560000
u64toa_sequential,lut,4,10.000000
u64toa_sequential,lut,5,14.880000
u64toa_sequential,lut,6,16.230000
u64toa_sequential,lut,7,21.800000
u64toa_sequential,lut,8,22.910000
u64toa_sequential,lut,9,27.530000
u64toa_sequential,lut,10,30.050000
u64toa_sequential,lut,11,36.520000
u64toa_sequential,lut,12,36.720000
u64toa_sequential,lut,13,42.520000
u64toa_sequential,lut,14,44.330000
u64toa_sequential,lut,15,49.630000
u64toa_sequential,lut,16,52.230000
u64toa_sequential,lut,17,57.270000
u64toa_sequential,lut,18,58.780000
u64toa_sequential,lut,19,65.030000
u64toa_sequential,lut,20,66.440000
u64toa_random,lut,0,57.401000
u64toa_sequential,mwilson,1,5.340000
u64toa_sequential,mwilson,2,8.700000
u64toa_sequential,mwilson,3,13.650000
u64toa_sequential,mwilson,4,19.450000
u64toa_sequential,mwilson,5,24.910000
u64toa_sequential,mwilson,6,30.860000
u64toa_sequential,mwilson,7,38.170000
u64toa_sequential,mwilson,8,42.800000
u64toa_sequential,mwilson,9,49.120000
u64toa_sequential,mwilson,10,52.420000
u64toa_sequential,mwilson,11,59.170000
u64toa_sequential,mwilson,12,65.150000
u64toa_sequential,mwilson,13,70.070000
u64toa_sequential,mwilson,14,76.990000
u64toa_sequential,mwilson,15,81.990000
u64toa_sequential,mwilson,16,102.920000
u64toa_sequential,mwilson,17,108.760000
u64toa_sequential,mwilson,18,116.830000
u64toa_sequential,mwilson,19,119.950000
u64toa_sequential,mwilson,20,127.150000
u64toa_random,mwilson,0,78.593500
u64toa_sequential,naive,1,5.700000
u64toa_sequential,naive,2,8.690000
u64toa_sequential,naive,3,13.250000
u64toa_sequential,naive,4,19.050000
u64toa_sequential,naive,5,25.400000
u64toa_sequential,naive,6,30.590000
u64toa_sequential,naive,7,37.240000
u64toa_sequential,naive,8,41.510000
u64toa_sequential,naive,9,47.830000
u64toa_sequential,naive,10,52.860000
u64toa_sequential,naive,11,59.520000
u64toa_sequential,naive,12,64.460000
u64toa_sequential,naive,13,70.860000
u64toa_sequential,naive,14,76.820000
u64toa_sequential,naive,15,83.020000
u64toa_sequential,naive,16,88.010000
u64toa_sequential,naive,17,94.940000
u64toa_sequential,naive,18,102.250000
u64toa_sequential,naive,19,108.210000
u64toa_sequential,naive,20,110.390000
u64toa_random,naive,0,83.377000
u64toa_sequential,null,1,2.490000
u64toa_sequential,null,2,2.490000
u64toa_sequential,null,3,2.490000
u64toa_sequential,null,4,2.490000
u64toa_sequential,null,5,2.490000
u64toa_sequential,null,6,2.490000
u64toa_sequential,null,7,2.490000
u64toa_sequential,null,8,2.490000
u64toa_sequential,null,9,2.490000
u64toa_sequential,null,10,2.490000
u64toa_sequential,null,11,2.490000
u64toa_sequential,null,12,2.490000
u64toa_sequential,null,13,2.490000
u64toa_sequential,null,14,2.490000
u64toa_sequential,null,15,2.490000
u64toa_sequential,null,16,2.490000
u64toa_sequential,null,17,2.490000
u64toa_sequential,null,18,2.490000
u64toa_sequential,null,19,2.490000
u64toa_sequential,null,20,2.490000
u64toa_random,null,0,2.141500
u64toa_sequential,sprintf,1,111.760000
u64toa_sequential,sprintf,2,120.170000
u64toa_sequential,sprintf,3,124.020000
u64toa_sequential,sprintf,4,130.090000
u64toa_sequential,sprintf,5,136.750000
u64toa_sequential,sprintf,6,143.730000
u64toa_sequential,sprintf,7,152.170000
u64toa_sequential,sprintf,8,160.150000
u64toa_sequential,sprintf,9,168.220000
u64toa_sequential,sprintf,10,174.620000
u64toa_sequential,sprintf,11,181.530000
u64toa_sequential,sprintf,12,187.890000
u64toa_sequential,sprintf,13,194.560000
u64toa_sequential,sprintf,14,200.800000
u64toa_sequential,sprintf,15,207.160000
u64toa_sequential,sprintf,16,213.200000
u64toa_sequential,sprintf,17,219.310000
u64toa_sequential,sprintf,18,226.120000
u64toa_sequential,sprintf,19,233.330000
u64toa_sequential,sprintf,20,240.110000
u64toa_random,sprintf,0,201.721500
u64toa_sequential,sse2,1,5.330000
u64toa_sequential,sse2,2,6.770000
u64toa_sequential,sse2,3,7.120000
u64toa_sequential,sse2,4,6.160000
u64toa_sequential,sse2,5,10.060000
u64toa_sequential,sse2,6,10.910000
u64toa_sequential,sse2,7,11.420000
u64toa_sequential,sse2,8,11.890000
u64toa_sequential,sse2,9,19.500000
u64toa_sequential,sse2,10,19.500000
u64toa_sequential,sse2,11,19.470000
u64toa_sequential,sse2,12,19.490000
u64toa_sequential,sse2,13,19.490000
u64toa_sequential,sse2,14,19.490000
u64toa_sequential,sse2,15,19.490000
u64toa_sequential,sse2,16,18.720000
u64toa_sequential,sse2,17,19.910000
u64toa_sequential,sse2,18,20.000000
u64toa_sequential,sse2,19,20.010000
u64toa_sequential,sse2,20,20.470000
u64toa_random,sse2,0,30.075500
i64toa_sequential,branchlut,1,7.660000
i64toa_sequential,branchlut,2,9.100000
i64toa_sequential,branchlut,3,9.460000
i64toa_sequential,branchlut,4,8.730000
i64toa_sequential,branchlut,5,11.620000
i64toa_sequential,branchlut,6,12.410000
i64toa_sequential,branchlut,7,13.080000
i64toa_sequential,branchlut,8,13.880000
i64toa_sequential,branchlut,9,24.090000
i64toa_sequential,branchlut,10,25.130000
i64toa_sequential,branchlut,11,25.650000
i64toa_sequential,branchlut,12,25.460000
i64toa_sequential,branchlut,13,25.560000
i64toa_sequential,branchlut,14,25.000000
i64toa_sequential,branchlut,15,25.640000
i64toa_sequential,branchlut,16,25.600000
i64toa_sequential,branchlut,17,30.100000
i64toa_sequential,branchlut,18,30.360000
i64toa_sequential,branchlut,19,30.910000
i64toa_sequential,branchlut,20,30.900000
i64toa_random,branchlut,0,35.024000
i64toa_sequential,count,1,7.390000
i64toa_sequential,count,2,10.990000
i64toa_sequential,count,3,13.920000
i64toa_sequential,count,4,18.270000
i64toa_sequential,count,5,23.670000
i64toa_sequential,count,6,28.040000
i64toa_sequential,count,7,33.730000
i64toa_sequential,count,8,38.830000
i64toa_sequential,count,9,44.610000
i64toa_sequential,count,10,49.950000
i64toa_sequential,count,11,55.580000
i64toa_sequential,count,12,59.910000
i64toa_sequential,count,13,65.390000
i64toa_sequential,count,14,69.940000
i64toa_sequential,count,15,77.270000
i64toa_sequential,count,16,81.840000
i64toa_sequential,count,17,92.840000
i64toa_sequential,count,18,93.520000
i64toa_sequential,count,19,97.740000
i64toa_sequential,count,20,99.000000
i64toa_random,count,0,70.633000
i64toa_sequential,countlut,1,7.130000
i64toa_sequential,countlut,2,7.480000
i64toa_sequential,countlut,3,10.010000
i64toa_sequential,countlut,4,10.520000
i64toa_sequential,countlut,5,12.890000
i64toa_sequential,countlut,6,13.750000
i64toa_sequential,countlut,7,16.610000
i64toa_sequential,countlut,8,17.100000
i64toa_sequential,countlut,9,21.750000
i64toa_sequential,countlut,10,23.030000
i64toa_sequential,countlut,11,24.040000
i64toa_sequential,countlut,12,24.410000
i64toa_sequential,countlut,13,26.730000
i64toa_sequential,countlut,14,27.830000
i64toa_sequential,countlut,15,30.080000
i64toa_sequential,countlut,16,30.780000
i64toa_sequential,countlut,17,35.280000
i64toa_sequential,countlut,18,36.040000
i64toa_sequential,countlut,19,37.550000
i64toa_sequential,countlut,20,37.580000
i64toa_random,countlut,0,38.617500
i64toa_sequential,lut,1,5.700000
i64toa_sequential,lut,2,8.200000
i64toa_sequential,lut,3,9.660000
i64toa_sequential,lut,4,11.070000
i64toa_sequential,lut,5,16.170000
i64toa_sequential,lut,6,17.100000
i64toa_sequential,lut,7,22.940000
i64toa_sequential,lut,8,24.970000
i64toa_sequential,lut,9,29.670000
i64toa_sequential,lut,10,31.580000
i64toa_sequential,lut,11,37.370000
i64toa_sequential,lut,12,40.350000
i64toa_sequential,lut,13,48.850000
i64toa_sequential,lut,14,48.700000
i64toa_sequential,lut,15,52.730000
i64toa_sequential,lut,16,53.910000
i64toa_sequential,lut,17,61.390000
i64toa_sequential,lut,18,62.460000
i64toa_sequential,lut,19,67.670000
i64toa_sequential,lut,20,65.930000
i64toa_random,lut,0,62.638000
i64toa_sequential,mwilson,1,6.950000
i64toa_sequential,mwilson,2,11.450000
i64toa_sequential,mwilson,3,17.420000
i64toa_sequential,mwilson,4,24.140000
i64toa_sequential,mwilson,5,30.490000
i64toa_sequential,mwilson,6,36.390000
i64toa_sequential,mwilson,7,41.000000
i64toa_sequential,mwilson,8,48.050000
i64toa_sequential,mwilson,9,54.540000
i64toa_sequential,mwilson,10,61.860000
i64toa_sequential,mwilson,11,68.270000
i64toa_sequential,mwilson,12,75.200000
i64toa_sequential,mwilson,13,81.650000
i64toa_sequential,mwilson,14,93.670000
i64toa_sequential,mwilson,15,94.350000
i64toa_sequential,mwilson,16,102.070000
i64toa_sequential,mwilson,17,108.670000
i64toa_sequential,mwilson,18,111.460000
i64toa_sequential,mwilson,19,121.390000
i64toa_sequential,mwilson,20,121.180000
i64toa_random,mwilson,0,87.899500
i64toa_sequential,naive,1,6.420000
i64toa_sequential,naive,2,9.660000
i64toa_sequential,naive,3,14.490000
i64toa_sequential,naive,4,20.530000
i64toa_sequential,naive,5,26.070000
i64toa_sequential,naive,6,32.360000
i64toa_sequential,naive,7,37.640000
i64toa_sequential,naive,8,44.330000
i64toa_sequential,naive,9,49.330000
i64toa_sequential,naive,10,54.050000
i64toa_sequential,naive,11,60.930000
i64toa_sequential,naive,12,68.030000
i64toa_sequential,naive,13,74.170000
i64toa_sequential,naive,14,79.780000
i64toa_sequential,naive,15,85.930000
i64toa_sequential,naive,16,93.610000
i64toa_sequential,naive,17,95.210000
i64toa_sequential,naive,18,103.200000
i64toa_sequential,naive,19,111.050000
i64toa_sequential,naive,20,107.100000
i64toa_random,naive,0,86.795000
i64toa_sequential,null,1,2.130000
i64toa_sequential,null,2,2.130000
i64toa_sequential,null,3,2.140000
i64toa_sequential,null,4,2.130000
i64toa_sequential,null,5,2.130000
i64toa_sequential,null,6,2.130000
i64toa_sequential,null,7,2.130000
i64toa_sequential,null,8,2.130000
i64toa_sequential,null,9,2.130000
i64toa_sequential,null,10,2.130000
i64toa_sequential,null,11,2.130000
i64toa_sequential,null,12,2.160000
i64toa_sequential,null,13,2.130000
i64toa_sequential,null,14,2.130000
i64toa_sequential,null,15,2.130000
i64toa_sequential,null,16,2.130000
i64toa_sequential,null,17,2.140000
i64toa_sequential,null,18,2.130000
i64toa_sequential,null,19,2.130000
i64toa_sequential,null,20,2.140000
i64toa_random,null,0,2.142000
i64toa_sequential,sprintf,1,117.590000
i64toa_sequential,sprintf,2,126.230000
i64toa_sequential,sprintf,3,130.330000
i64toa_sequential,sprintf,4,138.170000
i64toa_sequential,sprintf,5,145.740000
i64toa_sequential,sprintf,6,152.520000
i64toa_sequential,sprintf,7,157.950000
i64toa_sequential,sprintf,8,166.950000
i64toa_sequential,sprintf,9,174.050000
i64toa_sequential,sprintf,10,179.170000
i64toa_sequential,sprintf,11,185.200000
i64toa_sequential,sprintf,12,199.520000
i64toa_sequential,sprintf,13,210.420000
i64toa_sequential,sprintf,14,213.970000
i64toa_sequential,sprintf,15,225.010000
i64toa_sequential,sprintf,16,228.690000
i64toa_sequential,sprintf,17,235.600000
i64toa_sequential,sprintf,18,244.720000
i64toa_sequential,sprintf,19,248.150000
i64toa_sequential,sprintf,20,253.790000
i64toa_random,sprintf,0,212.483500
i64toa_sequential,sse2,1,6.090000
i64toa_sequential,sse2,2,7.490000
i64toa_sequential,sse2,3,7.840000
i64toa_sequential,sse2,4,7.660000
i64toa_sequential,sse2,5,11.050000
i64toa_sequential,sse2,6,11.560000
i64toa_sequential,sse2,7,12.260000
i64toa_sequential,sse2,8,13.280000
i64toa_sequential,sse2,9,20.680000
i64toa_sequential,sse2,10,20.560000
i64toa_sequential,sse2,11,20.560000
i64toa_sequential,sse2,12,20.570000
i64toa_sequential,sse2,13,20.560000
i64toa_sequential,sse2,14,20.570000
i64toa_sequential,sse2,15,20.930000
i64toa_sequential,sse2,16,18.380000
i64toa_sequential,sse2,17,20.450000
i64toa_sequential,sse2,18,20.010000
i64toa_sequential,sse2,19,21.730000
i64toa_sequential,sse2,20,21.730000
i64toa_random,sse2,0,32.885500
</textarea>
</div>
<div class="row" id="downloadDD" style="display: none">
<div class="btn-group pull-right" >
    <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-picture"></span></button>
    <ul class="dropdown-menu">
        <li><a tabindex="-1" href="#" dltype="image/jpeg">JPEG</a></li>
        <li><a tabindex="-1" href="#" dltype="image/png">PNG</a></li>
        <li><a tabindex="-1" href="#" dltype="application/pdf">PDF</a></li>
        <li><a tabindex="-1" href="#" dltype="image/svg+xml">SVG</a></li>
    </ul>
</div>
</div>
<div class="row" id="showMD" style="display: none">
<div class="btn-group pull-right" >
    <button class="btn dropdown-toggle" data-toggle="collapse"><span class="glyphicon glyphicon-list-alt"></span></button>
</div>
<br/>
<br/>
<div class="collapse">
<textarea class="form-control" rows="5" readonly>
</textarea>
</div>
</div>
<form method="post" action="http://export.highcharts.com/" id="imageGetForm">
    <input type="hidden" name="filename" id="imageFilename" value="" />
    <input type="hidden" name="type" id="imageGetFormTYPE" value="" />
    <input type="hidden" name="width" value="900" />
    <input type="hidden" name="svg" value="" id="imageGetFormSVG" />
</form>
</div>
</body>
</html>